#ifndef __COMUN_CONVERSORDESTREAMS_H
#define __COMUN_CONVERSORDESTREAMS_H

/*****************************************************************************
*                     Organizaci�n de Datos - 75.06                          *
*                         C�tedra Lic. Servetto                              *
*            Facultad de Ingenier�a - Universidad de Buenos Aires            *
******************************************************************************/ 

#include "Archivo.h"
#include "Operacion.h"
#include "Clase.h"
#include "Condiciones.h"
#include <sstream>
#include <string>

using namespace std;

namespace Comun
{

	class ConversorDeStreams
	{

		public:

		static void VoidAStream(stringstream* salida);
		static void EnteroAStream(int entero, stringstream* salida);
		static void BooleanoAStream(bool booleano, stringstream* salida);
		static void CadenaAStream(string cadena, stringstream* salida);
		static void OperacionAStream(Operacion operacion, stringstream* salida);
		static void DatosDeGrupoAStream(Grupo& grupo, stringstream* salida);
		static void MetadatosDeArchivoAStream(MetadatosArchivo& metadatosArchivo, stringstream* salida);

		static void OperacionAStream(OperacionConsulta operacion, stringstream* salida);
		static void TipoSimboloAStream(TipoSimbolo operacion, stringstream* salida);
		static void ClaseAStream(Clase* clase, stringstream* salida);
		static void ListaDatosAStream(list<ClaveValor>* clase, stringstream* salida);
		static void ListaMiembrosAStream(list<string>* clase, stringstream* salida);
		static void CondicionAStream(CondicionCompuesta* clase, stringstream* salida);

		static int StreamAEntero(stringstream* entrada);
		static bool StreamABooleano(stringstream* entrada);
		static string StreamACadena(stringstream* entrada);
		static Operacion StreamAOperacion(stringstream* entrada);
		static Grupo& StreamADatosDeGrupo(stringstream* entrada);
		static MetadatosArchivo& StreamAMetadatosDeArchivo(stringstream* entrada);

		static Resultado* StreamAResultado(stringstream* entrada);
		static OperacionConsulta StreamAOperacionConsulta(stringstream* entrada);
		static TipoSimbolo StreamATipoSimbolo(stringstream* salida);
		static Clase* StreamAClase( stringstream* entrada);
		static list<ClaveValor>* StreamAListaDatos(stringstream* entrada);
		static list<string>* StreamAListaDeMiembros(stringstream* entrada);
		static CondicionCompuesta* StreamACondicion(stringstream* entrada);

	};

}

#endif
